#include <typescommon.h>

// 第1优先级：各种括号，如()、[]等、成员运算符 . ；
// 第2优先级：所有单目运算符，如++(自加)、--(自减)、!(非)、~(位非)等；
// 第3优先级：乘法运算符*、除法运算符/、求余运算符%；
// 第4优先级：加法运算符+、减法运算符-；
// 第5优先级：移位运算符<<、>>；
// 第6优先级：大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=；
// 第7优先级：等于运算符==、不等于运算符!=；
// 第8优先级：按位与运算符&；
// 第9优先级：按位异或运算符^；
// 第10优先级：按位或运算符|；
// 第11优先级：逻辑与运算符&&；
// 第12优先级：逻辑或运算符||；
// 第13优先级：三目条件运算符 ?: ；
// 第14优先级：各种赋值运算符，如=、+=、-=、*=、/= 等；
// 第15优先级：逗号运算, 。

// 比如 int a = -2 + 1 << 1;应该是多少。
// int b = (3 & 2 == 2);应该是多少。
// 法则就一条，加括号。括号最高

// 寄存器操作很常见！
#define setValBits(chval, shift, mask, bitsval)       \
    {                                                 \
        (chval) &= ~((mask) << (shift));              \
        (chval) |= (((bitsval) & (mask)) << (shift)); \
    }

int main(int argc, char **argv)
{
    int tmpval = 0x12345678;
    setValBits(tmpval, 8, 0xff, 0xab);
    logdebug("%x", tmpval);
    return 1;
}
